The magnetic recording channel is characterized as a communication channel that has significant intersymbol interference (ISI) and allows only binary inputs. Coding for the high-density magnetic recording channel is difficult because the binary constraint prohibits constellation expansion. Because the channel sampling rate has to increase to compensate for the code rate loss, leading to increased ISI and a corresponding degradation in signal-to-noise ratio (SNR), only high rate codes are appropriate for magnetic recording channels. Because of the ISI, the channel response is typically equalized to a special partial response (PR) signal and detected with a Viterbi detector matched to the partial response channel. The performance of the detector is dominated by the minimum distance error events.
In the prior art, a single parity bit has been used to provide significant coding gain when applied to a channel with odd-weight dominant error events “+−+” and “+”. By increasing the number of parity bits, even-weight dominant error events may also be eliminated. However, the greater the number of parity bits, the lower the code rate. Furthermore, the code complexity significantly increases by using more parity bits.
Turbo codes are binary concatenated convolutional codes capable of operation near Shannon capacity on additive white Gaussian noise (AWGN) channels. Parallel and serial turbo decoding has been investigated for their application to partial response channels. Unlike conventional error codes, turbo codes need not trade off code rate or code complexity for increased Euclidean distance between channel sequences. This is significant for ISI channels. However, the decoding complexity (computation and memory) and decoding delay of turbo codes is very large compared with simple parity check codes. Furthermore, the error propagation is another problem for turbo decoding.
Interleaving is the process of reordering the symbols in a group of transmitted codewords such that adjacent symbols in the data stream are not from the same codeword. The receiver reassembles the codewords when it processes the data stream. The interleaving process helps reduce the effects of burst errors (i.e., multiple errors in a row), because rearranging the codeword symbols spreads the errors among multiple codewords.
Block interleaver/deinterleavers process data in a discrete stream and are used in applications such as GSM (i.e., mobile phones) and the magnetic recording system. These functions are often used with Reed-Solomon functions or Turbo Code encoders/decoders. Many channels can be affected by burst errors, which are caused by impulse noise, such as that generated by electrical interference in copper lines and fading in wireless systems.
These burst errors are much more difficult to detect and correct than random errors. With many coding techniques, however, we only deal with random errors on channels such as Additive White Gaussian Noise (AWGN). In this case, errors occur randomly, and independent of each other, on the channel according to a probability distribution for that particular channel. Although this situation will still arise, burst errors are potentially more catastrophic.
The structure of Turbo codes is ideally suited to combat both random errors and burst errors. Interleavers are one of the main ways used to combat burst errors. Interleavers are essentially permuters, that is to say they change the order of the bits in a block. Although the Turbo Code traditionally uses convolutional constituent codes, which are stream-oriented, it takes on a block structure due to the Interleaver. Blocking delays are also introduced here.
The idea of the Interleaver is to spread the influence of each bit over a greater distance. Two identical encoders work on the same bits, but in a different order. In this manner, when one encoder produces a weak code for a set of bits, the other will produce a strong code. This combination of codes can produce a powerful combined code. Also, because the bits are in a different order, should a burst error take out a block of bits, we should still have the information in the permuted set.
In the case of the Turbo Code it is important that the Interleaver sorts the bits in a manner that lacks any apparent order. This is unlike normal Interleavers, which tend to rearrange the bits in some systematic manner. However, a systematic interleaver is easier to implement than a random interleaver. The rectangular block interleaver is the simplest interleaver, such as the product code. It is also important that N be selected to be quite large preferably N>1000, where N is the size of the Interleaver block.
It has been suggested that Turbo Codes have many features in common with ‘random’ block codes, which are known to approach Shannon-limit performance as the block size increases. However, these ‘random’ codes are not practical due to the complexity of the decoding algorithm. Turbo codes have similar performance to these codes, but they avoid the decoding complexity by employing iterative algorithms.
Traditionally, trellis codes have reduced the decoder complexity by means of the Viterbi algorithm. This continually trims the various options to be correlated with the received signal. The traditional Viterbi algorithm only provides hard output, i.e., the surviving path. To perform iterative decoding, a soft-input/soft-output algorithm is used in Turbo decoding. The decoding algorithm used in the Turbo Code is the MAP algorithm. This algorithm is based on maximum likelihood, and is a soft-input/soft-output algorithm. That is to say that it does not take an input of only 1 or 0, but several levels of quantization. There is approximately a 2–3 dB gain to be made by using a soft-input algorithm. The soft-output is a measure of the probability of a correct decision. There are some suboptimal soft-input/soft-output algorithms, such as Max-Log-MAP algorithm and Soft output Viterbi algorithm (SOVA). The iterative combining of the weak individual codes, in Turbo codes, gives rise to a strong received code. This has the dual benefit of reducing both the scope for errors and the decoder complexity, at the expense of decoding time.
The decoding algorithm used in the Turbo Code is the MAP algorithm. This algorithm is based on maximum likelihood, and is a soft-input/soft-output algorithm.
Viterbi decoding works by calculating paths and continually trimming the paths so that the size of the recorded data does not get too large. This is because Viterbi algorithms are normally used on streamed data. The Turbo Code takes on a block-like structure. The MAP algorithm requires the whole block of data before decoding can begin.
Past methods have tended to use a substantial amount of memory and have been prone to propagation errors.